package com.monlyu.util;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.text.DecimalFormat;

/********************************************************************************
 * 
 * <b>功能描述☞</b><br>
 *	
 * <b>开发公司☞</b>重庆唯尼科技有限公司<br>
 * <b>版权☞</b>本文件归重庆唯尼科技有限公司所有<br>
 * <b>项目名☞</b>newsH<br>
 * <b>文件路径☞</b>com.monlyu.util.MathUtil.java<br>
 * 
 * @author chendan
 * @since JDK 5
 * @version  1.0.8
 * 
 ********************************************************************************/
public class MathUtil {

	public static final DecimalFormat DEFAULT_FORMAT = new DecimalFormat(
			"####0.00");

	public static final DecimalFormat FORMAT4 = new DecimalFormat("0.00");

	public static BigDecimal toBigDecimal(Number number) {
		if (number == null) {
			return BigDecimal.ZERO;
		} else if (number instanceof BigDecimal) {
			return (BigDecimal) number;
		} else if (number instanceof BigInteger) {
			return new BigDecimal((BigInteger) number);
		} else {
			return new BigDecimal(number.doubleValue());
		}
	}

	public static BigDecimal divide(BigDecimal v1, BigDecimal v2) {
		return divide(v1, v2, 4);
	}

	public static BigDecimal divide(BigDecimal v1, BigDecimal v2, int scale) {
		return v1.divide(v2, scale, BigDecimal.ROUND_HALF_UP);
	}

	public static String toString(double value) {
		String str = FORMAT4.format(value);
		int i = str.indexOf('.');
		if (i < 0) {
			return str;
		}

		if (str.substring(i + 1).matches("0+")) {
			return str.substring(0, i);
		}
		return str;
	}

	public static int parseInt(String s) {
		return (int) Double.parseDouble(s);
	}

	/**
	 * 如果greater >= smaller 返回true
	 * 
	 * @since HXH 2009-1-18
	 */
	public static boolean ge(BigDecimal greater, BigDecimal smaller) {
		return greater.compareTo(smaller) >= 0;
	}

	/**
	 * 是否大于等于0
	 * 
	 * @since 2009-1-18
	 */
	public static boolean geZero(BigDecimal positive) {
		return ge(positive, BigDecimal.ZERO);
	}

	public static String format(Object obj) {
		final String str = FORMAT4.format(obj);
		return "-0.00".equals(str) ? "0.00" : str;
	}

	/**
	 * 将float类型数据四舍五入，保留median位小数
	 * 
	 * @param num
	 *            需要处理的数据
	 * @param Median
	 *            保存的小数位数
	 * @return
	 * @since chendan 2010-6-28
	 */
	public static float formatFraction(float num, int Median) {
		BigDecimal bd = new BigDecimal(num);
		bd = bd.setScale(Median, BigDecimal.ROUND_HALF_UP);
		return bd.floatValue();
	}
}
